package cn.oesoft.tennissystem.web.admin;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping("/admin")
public class FileController {
	@Value("${file.upload.path}")
	String sysPath;

	@Value("${file.upload.relationImg}")
	String relationImg;

	@PostMapping("/uploadFile")
	public String uploadFile(MultipartFile[] fileUpload, Model model) {
		// 默认文件上传成功，并返回状态信息
		model.addAttribute("uploadStatus", "上传成功！");
		MultipartFile file = fileUpload[0];
		// 获取文件名以及后缀名
		String fileName = file.getOriginalFilename();
		// 重新生成文件名（根据具体情况生成对应文件名）
		fileName = UUID.randomUUID() + "_" + fileName;
		// 指定上传文件本地存储目录，不存在需要提前创建
		String dirPath = sysPath + relationImg;// 文件保存路径

		File filePath = new File(dirPath);
		if (!filePath.exists()) {
			filePath.mkdirs();
		}
		try {
			file.transferTo(new File(dirPath + fileName));
		} catch (Exception e) {
			e.printStackTrace();
			// 上传失败，返回失败信息
			model.addAttribute("uploadStatus", "上传失败： " + e.getMessage());
		}

		// 将请求文件的相对路径返回
		model.addAttribute("imgUrl", relationImg + fileName);
		// 携带上传状态信息回调到文件上传页面
		return "back/tennisRacket_edit";
	}

	// 异步上传文件
	@ResponseBody
	@PostMapping("/ajaxUploadFile")
	public Map ajaxUploadFile(MultipartFile[] fileUpload) {
		Map<String, Object> map = new HashMap<>();
		map.put("test", "test");
		// 默认文件上传成功，并返回状态信息
		map.put("uploadStatus", "上传成功！");
		MultipartFile file = fileUpload[0];
		// 获取文件名以及后缀名
		String fileName = file.getOriginalFilename();
		// 重新生成文件名（根据具体情况生成对应文件名）
		fileName = UUID.randomUUID() + "_" + fileName;
		// 指定上传文件本地存储目录，不存在需要提前创建
		String dirPath = sysPath + relationImg;// 文件保存路径

		File filePath = new File(dirPath);
		if (!filePath.exists()) {
			filePath.mkdirs();
		}
		try {
			file.transferTo(new File(dirPath + fileName));
		} catch (Exception e) {
			e.printStackTrace();
			// 上传失败，返回失败信息
			map.put("uploadStatus", "上传失败： " + e.getMessage());
		}

		// 将请求文件的相对路径返回
		map.put("imgUrl", relationImg + fileName);
		// 携带上传状态信息回调到文件上传页面
		return map;
	}

	// 异步上传文件
	@ResponseBody
	@PostMapping("/ajaxUploadPhoto")
	public Map<String, String> ajaxUploadPhoto(MultipartFile photo) {
		Map<String, String> ret = new HashMap<String, String>();
		if (photo == null) {
			ret.put("type", "error");
			ret.put("msg", "选择要上传的文件！");
			return ret;
		}
		if (photo.getSize() > 1024 * 1024 * 10) {
			ret.put("type", "error");
			ret.put("msg", "文件大小不能超过10M！");
			return ret;
		}
		// 获取文件后缀
		String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf(".") + 1,
				photo.getOriginalFilename().length());
		if (!"jpg,jpeg,gif,png".toUpperCase().contains(suffix.toUpperCase())) {
			ret.put("type", "error");
			ret.put("msg", "请选择jpg,jpeg,gif,png格式的图片！");
			return ret;
		}
		// 获取文件名以及后缀名
		String fileName = photo.getOriginalFilename();
		// 重新生成文件名（根据具体情况生成对应文件名）
		fileName = UUID.randomUUID() + "_" + fileName;
		// 指定上传文件本地存储目录，不存在需要提前创建
		String dirPath = sysPath + relationImg;// 文件保存路径

		File filePath = new File(dirPath);

		if (!filePath.exists()) {
			filePath.mkdirs();
		}
		try {
			photo.transferTo(new File(dirPath + fileName));
		} catch (Exception e) {
			ret.put("type", "error");
			ret.put("msg", "保存文件异常！");
			e.printStackTrace();
			return ret;
		}
		ret.put("type", "success");
		ret.put("msg", "上传图片成功！");
		ret.put("filepath", relationImg);
		ret.put("filename", fileName);
		return ret;
	}
	
}
